저처럼 Next.js 웹을 AWS Lambda에 서버리스 형태로 배포할 때, 많은 개발자가 흔히 겪는 혼란이 있습니다.
특히 Lambda의 인스턴스(Instance), 콜드 스타트(Cold Start), 워밍(Warming) 같은 용어는 자칫 잘못 이해하면 오랜 시간 혼란을 겪게 됩니다.
이 글은 실제로 개발자가 궁금해하는 포인트를 중심으로 쉽게 정리했습니다.
Lambda를 처음 사용할 때 가장 흔히 겪는 혼란이 이 부분입니다.
쉽게 비유하자면
Lambda의 핵심적인 한계점 중 하나는 바로 콜드 스타트입니다. 콜드 스타트란 Lambda 인스턴스가 처음 만들어질 때 생기는 지연을 의미합니다.
이 현상이 발생하는 이유는 Lambda의 특성이 있습니다.
예시 상황을 들어볼까요?
사용자가 부하가 심한 페이지
(처리 시간이 긴 페이지)에 접근합니다.
이때 두 번째 사용자가 바로 그 순간 동시에 접근한다면?
이미 처리 중인 인스턴스가 있으므로, AWS는 두 번째 사용자를 위한 새로운 인스턴스를 즉시 생성해야 합니다.
이때!! 콜드 스타트 지연이 발생합니다.
워머(Warmer)는 바로 콜드 스타트를 줄이기 위한 전략입니다. 서버리스 형태에서 흔히 쓰이는 warm
옵션이 바로 이 워머를 관리합니다.
워머가 하는 일은 다음과 같습니다.
여기서 많은 분이 헷갈립니다.
SST의 문서에서 볼 수 있는 warm: 1
, warm: 3
같은 숫자는 다음을 의미합니다.
warm: 1
→ 최소 1개의 Lambda 인스턴스를 항상 활성 상태로 유지warm: 3
→ 최소 3개의 Lambda 인스턴스를 항상 활성 상태로 유지만약 동시 요청이 거의 없거나 적다면, warm: 1
만으로 충분히 빠른 응답이 가능합니다.
그러나 동시에 여러 요청이 자주 발생할 경우, 값이 크면 클수록 많은 인스턴스가 미리 준비되므로, 콜드 스타트 발생 가능성이 줄어듭니다.
물론 제 서비스들은 아직 한개로도 충분합니다 😓
Lambda를 Next.js 애플리케이션과 결합할 때 중요한 포인트
warm
값을 설정하는 것warm
값을 높여 미리 다수의 인스턴스를 유지할 필요성이 있다는 점입니다.초기 단계 서비스라면 대부분의 경우 warm: 1
이 적절합니다.
서비스가 성장하면 콜드 스타트 문제를 최소화하기 위해 점차적으로 늘리거나, 동시성 처리가 가능한 AWS ECS나 Fargate와 같은 대체 서비스로 넘어가는 것도 고려할 수 있습니다.
제가 헷갈려했고 주변에서 동일한 경험을 하는 분들을 보니 블로그에 올려두는것도 좋겠다 싶어서 겸사겸사 정리했습니다.
저와 함께 Lambda의 개념이 이제는 명확해졌기를 바랍니다! 🚀